home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / BLKDEV.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  2KB  |  90 lines

  1. #ifndef _LINUX_BLKDEV_H
  2. #define _LINUX_BLKDEV_H
  3.  
  4. #include <linux/major.h>
  5. #include <linux/sched.h>
  6. #include <linux/genhd.h>
  7. #include <linux/tqueue.h>
  8.  
  9. /*
  10.  * Ok, this is an expanded form so that we can use the same
  11.  * request for paging requests when that is implemented. In
  12.  * paging, 'bh' is NULL, and the semaphore is used to wait
  13.  * for read/write completion.
  14.  */
  15. struct request {
  16.     volatile int rq_status;    /* should split this into a few status bits */
  17. #define RQ_INACTIVE        (-1)
  18. #define RQ_ACTIVE        1
  19. #define RQ_SCSI_BUSY        0xffff
  20. #define RQ_SCSI_DONE        0xfffe
  21. #define RQ_SCSI_DISCONNECTING    0xffe0
  22.  
  23.     kdev_t rq_dev;
  24.     int cmd;        /* READ or WRITE */
  25.     int errors;
  26.     unsigned long sector;
  27.     unsigned long nr_sectors;
  28.     unsigned long current_nr_sectors;
  29.     char * buffer;
  30.     struct semaphore * sem;
  31.     struct buffer_head * bh;
  32.     struct buffer_head * bhtail;
  33.     struct request * next;
  34. };
  35.  
  36. typedef void (request_fn_proc) (void);
  37. typedef struct request ** (queue_proc) (kdev_t dev);
  38.  
  39. struct blk_dev_struct {
  40.     request_fn_proc        *request_fn;
  41.     /*
  42.      * queue_proc has to be atomic
  43.      */
  44.     queue_proc        *queue;
  45.     void            *data;
  46.     struct request        *current_request;
  47.     struct request   plug;
  48.     struct tq_struct plug_tq;
  49. };
  50.  
  51. struct sec_size {
  52.     unsigned block_size;
  53.     unsigned block_size_bits;
  54. };
  55.  
  56. extern struct sec_size * blk_sec[MAX_BLKDEV];
  57. extern struct blk_dev_struct blk_dev[MAX_BLKDEV];
  58. extern struct wait_queue * wait_for_request;
  59. extern void resetup_one_dev(struct gendisk *dev, int drive);
  60. extern void unplug_device(void * data);
  61. extern void make_request(int major,int rw, struct buffer_head * bh);
  62.  
  63. /* md needs this function to remap requests */
  64. extern int md_map (int minor, kdev_t *rdev, unsigned long *rsector, unsigned long size);
  65. extern int md_make_request (int minor, int rw, struct buffer_head * bh);
  66. extern int md_error (kdev_t mddev, kdev_t rdev);
  67.  
  68. extern int * blk_size[MAX_BLKDEV];
  69.  
  70. extern int * blksize_size[MAX_BLKDEV];
  71.  
  72. extern int * hardsect_size[MAX_BLKDEV];
  73.  
  74. extern int * max_readahead[MAX_BLKDEV];
  75.  
  76. extern int * max_sectors[MAX_BLKDEV];
  77.  
  78. #define MAX_SECTORS 244 /* 254 ? */
  79.  
  80. #define PageAlignSize(size) (((size) + PAGE_SIZE -1) & PAGE_MASK)
  81. #if 0  /* small readahead */
  82. #define MAX_READAHEAD PageAlignSize(4096*7)
  83. #define MIN_READAHEAD PageAlignSize(4096*2)
  84. #else /* large readahead */
  85. #define MAX_READAHEAD PageAlignSize(4096*18)
  86. #define MIN_READAHEAD PageAlignSize(4096*3)
  87. #endif
  88.  
  89. #endif
  90.